package code18_模版模式;

/**
 * @author 黄衡熙
 * @version 1.0
 */
public class SortTemplate {
    //第一个泛型比较任何类型的数组，第一个参数表示要排序的泛型数组，第二个参数表示要比较器接口实例，命名为sc
    public static <T> void sort(T[] arr, SortComparator sc) {
        // 定义一个顶层的逻辑架构
        // 外层控制比较的轮数
        for (int i = 0; i < arr.length - 1; i++) {
            // 内层循环控制比较的次数
            for (int j = 0; j < arr.length - 1 - i; j++) {
                // 具体的比较规则
                // 由于具体的规则不是固定的,而是在使用的时候才能确定
                // 在此处存在的比较规则是不确定的,因此此处可以使用一个声明好的方法,但是不做具体实现
                // 具体的实现由方法的调用者去实现
                //调用比较器
                int result = sc.compareTo(arr[j], arr[j + 1]);
                // 根据返回值判断是否更换顺序
                if (result > 0) {
                    T temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

}
